
class MY_hhhh<J> {

    Object[] h = new Object[10];

    int index = 0;

    public void set_h(J val) {
        if (index >= h.length) {
            return;
        }
        h[index++] = val;
    }
    public void set_h(int poi, J val) {
        h[poi] = val;
    }

    public J get_h(int poi) {
        return (J) h[poi];
    }
}
public class fanxing_inLearn {

    //通配符 ?
//    通配符上下界
//    ? extends number 表示的是该该实参类型是number的子类或是number类
//    该实参类型是向下扩张的所以number是上界
//    ? super number 表示的是该实参类型是number的父类或number类
//    该实参类型的范围的是向上扩展的所以number是下界
    public static void fun(MY_hhhh<? extends Number> tmp) {
//        tmp.set_h(1,1); 没有加类型限制就有可能说明值都能放
        //但是若加了类型限制 那么这个方法就变得不灵活了 通用性不高 那么就可以
        //用到?通配符 他表示能接受任意的类型
//         tmp.set_h(1,1);//因为不知道具体类型所以不能修改
        //
        System.out.println(tmp.get_h(0));
        System.out.println(tmp.get_h(1));
    }
    public static void main(String[] args) {
        MY_hhhh<Integer> hh = new MY_hhhh<>();
        hh.set_h(11);
        fun(hh);
    }

}
